#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

//二叉树
typedef struct BinaryTreeNode
{
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
	int val;
}BTNode;

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);
// 判断二叉树是否是完全二叉树
bool BinaryTreeComplete(BTNode* root);
// 创建树的新节点
BTNode* BuyNewNode(int);




typedef struct BinaryTreeNode* DataType;
//队列
typedef struct Qnode
{
	struct Qnode* next;
	DataType val;
}Qnode;

typedef struct Queue
{
	Qnode* head;
	Qnode* tail;
	int size;
}Queue;

//初始化队列
void QueueInit(Queue* ps);
//进队列
void QueuePush(Queue* ps, DataType x);
//出队列
void QueuePop(Queue* ps);
//销毁队列
void QueueDestory(Queue* ps);
//获取队列头元素
DataType QueueFront(Queue* ps);
//获取队列尾元素
DataType QueueBack(Queue* ps);
//检测队列是否为空
bool QueueEmpty(Queue* ps);
//获取队列有效元素个数
int QueueSzie(Queue* ps);

